home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / gnu / gnupltdc.lha / docs / termdoc.c < prev    next >
C/C++ Source or Header  |  1996-01-22  |  2KB  |  67 lines

  1. /* this file is included into all the doc2* convertors
  2.  * it provides a replacement for fgets() which inserts all the
  3.  * help from the terminal drivers line by line at the < in the
  4.  * gnuplot.doc file. This way, doc2* dont need to know what's going
  5.  * on, and think it's all coming from one place
  6.  */
  7. #ifdef TEST
  8. #include <stdio.h>
  9. #endif
  10.  
  11. #include <ctype.h>
  12.  
  13.  
  14. /* may need to something more clever for 64k machines ? */
  15.  
  16. #define GOT_DRIVER_H   /* a complete lie, but they dont need it ! */
  17. #define TERM_HELP
  18. #define START_HELP(x) /* nothing */
  19. #define END_HELP(x)   ,
  20. char *termtext[] = {
  21. #include "term.h"
  22. NULL
  23. };
  24.  
  25.  
  26. char *get_line(char *buffer, int max, FILE *fp)
  27. {
  28.     static int line=-1;  /* not going yet */
  29.     static int level=0; /* terminals are at level 0 - we add this */
  30.  
  31.     if (line == -1) {
  32.         if (!fgets(buffer, max, fp))
  33.             return NULL; /* EOF */
  34.  
  35.         if (buffer[0] != '<')
  36.             return buffer; /* the simple case */
  37.  
  38.         /* prepare to return text from the terminal drivers */
  39.         level=buffer[1]-'0';
  40.         line=0;
  41.     }
  42.  
  43.     /* we're sending lines from terminal help */
  44.     /* more efficient to return pointer, but we need to modify it */
  45.     strncpy(buffer, termtext[line], max);
  46.     strncat(buffer, "\n", max);
  47.     if (isdigit(buffer[0]))
  48.         buffer[0] += level;
  49.     if (!termtext[++line])
  50.         line=(-1); /* we've done the last line, so get next line from file */
  51.     return buffer;
  52. }
  53.  
  54.  
  55. #ifdef TEST
  56. int main()
  57. {
  58.     char line[256];
  59.     while(get_line(line, 256, stdin))
  60.         fputs(line, stdout);
  61.     return 0;
  62. }
  63. #endif
  64.  
  65. #define fgets(a,b,c) get_line(a,b,c)
  66.  
  67.